package org.xy.common.serviceitf;

import org.xy.common.daoitf.BaseMapper;
import org.xy.common.domainitf.BaseBean;
import org.xy.common.page.PageManager;
import org.xy.common.util.SequenceUtil;

import java.util.List;

public abstract class BaseService<T extends BaseBean> {
    public abstract BaseMapper<T> getDao();

    public void insertData(T cond) {
        if (cond.getId() == null || cond.getId() <= 0) {
            cond.setId(SequenceUtil.id());
        }
        getDao().insertData(cond);
    }

    public void updateData(T cond) {
        getDao().updateData(cond);
    }

    public void deleteData(T cond) {
        getDao().deleteData(cond);
    }

    public List<T> queryAll(T cond) {
        return getDao().queryAll(cond);
    }


    public T query(T cond) {
        return getDao().query(cond);
    }

    public Long queryCount(T cond) {
        return getDao().queryCount(cond);
    }

    public PageManager queryByPage(T cond, PageManager page) {
        Long count = getDao().queryCount(cond);
        if (count > 0) {
            page.setCount(count.intValue());
            int pageNum = page.getPage();
            pageNum = pageNum - 1;
            if (pageNum < 0) {
                pageNum = 0;
            }
            int pageCount = count.intValue() / page.getLimit();
            if (count.intValue() % page.getLimit() > 0) {
                pageCount = pageCount + 1;
            }
            if (pageNum >= pageCount) {
                pageNum = pageCount - 1;
            }
            if (pageNum > 0) {
                cond.setLimit(pageNum * page.getLimit() + "," + page.getLimit());
            } else {
                cond.setLimit(String.valueOf(page.getLimit()));
            }

            List<T> dataList = getDao().queryAll(cond);
            page.setData(dataList);
        } else {
            page.setPage(0);
            page.setCount(0);
        }


        return page;
    }

}
